6.15 实例
1、筛选下半年销量大于上半年的记录
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 筛选下半年销量大于上半年的记录.xlsx" , header =[ 0,1 ], index_col = 0 )
print (df)
df1=df[df[ "上半年" ].sum(axis=1)>df[ "下半年" ].sum( axis = 1 )]
print (df1)
返回:
姓名 | 上半年 | 下半年 | ||||
---|---|---|---|---|---|---|
1月 | 2月 | 3月 | 7月 | 8月 | 9月 | |
张三 | 25 | 28 | 96 | 24 | 38 | 74 |
许麻子 | 34 | 7 | 55 | 32 | 73 | 42 |
郭麻子 | 55 | 75 | 44 | 82 | 68 | 15 |
李四 | 84 | 14 | 61 | 68 | 54 | 96 |
姓名 | 上半年 | 下半年 | ||||
---|---|---|---|---|---|---|
1月 | 2月 | 3月 | 7月 | 8月 | 9月 | |
张三 | 25 | 28 | 96 | 24 | 38 | 74 |
郭麻子 | 55 | 75 | 44 | 82 | 68 | 15 |
2、对文本数字月份排序
需要对表格的索引排序,但如果直接使用df.sort_index()排序后,月份顺序并不正确, 因为月份中既有数字,又有文本,默认是按照文本方式排序,但我们需要按照月份数据大小排序,所以需要使用索引的自定义排序。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 对文本数字月份排序.xlsx" , index_col = 0 )
df0=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 对文本数字月份排序.xlsx" )
#df0如果设置了索引,再去提取Series数据会报错
print (df)
# df1=df.月份 # 如果在导入数据是设置了索引,那么这样写会报错
# df1=df.月份.str.findall("\d+").str[0].astype("int") # 第二个str如果没有,则会返回Series的一个元素如8月的8,如果设置则会返回整排列表每个列表的第1个元素
df1=df0.月份.str.extract( "(\d+)" , expand = False ).astype( "int" ) # (\d+)如括号不写,分不了组,会报错,expand=False 表示不扩展为,设置为Series数据
print (df1)
df2=df.sort_index(key= lambda s:s.str.extract( "(\d+)" , expand = False ).astype( "int" ), axis =0, ascending = True )
# key是对index_col=0索引排序
print (df2)
返回:
北京 | 上海 | 深圳 | |
---|---|---|---|
月份 | |||
11月 | 1200 | 8200 | 7000 |
8月 | 2100 | 1300 | 7400 |
10月 | 1300 | 500 | 3700 |
9月 | 6300 | 1400 | 7700 |
12月 | 7100 | 4300 | 1200 |
0 | 11 |
1 | 8 |
2 | 10 |
3 | 9 |
4 | 12 |
Name: 月份, dtype: int32
北京 | 上海 | 深圳 | |
---|---|---|---|
月份 | |||
8月 | 2100 | 1300 | 7400 |
9月 | 6300 | 1400 | 7700 |
10月 | 1300 | 500 | 3700 |
11月 | 1200 | 8200 | 7000 |
12月 | 7100 | 4300 | 1200 |
3、根据分类返回等级并设置为索引
对分数列的数字进行判断,大于等于90返回优,大于等于70返回中,否则返回差,将返回的等级做为索引添加到行索引中,并且做为行索引中的第1级。
import pandas as pd
def levels(score):
if score>=90:
return "优"
elif score>=70:
return "中"
else:
return "差"
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.6.15案列 根据分类返回等级并设置为索引.xlsx" , index_col = 0 )
print (df)
df1=df.set_index( "分数" , append = True , drop = False ).rename( index = levels , level = "分数" ).swaplevel( 0,1 ).sort_index()
#index=levels是将判断函数放入索引序列,swaplevel(0,1)是将两个索引位置调换,
print (df1)
返回:
姓名 | 分数 | |
---|---|---|
工号 | ||
NED01 | 张三 | 99 |
NED02 | 李四 | 89 |
NED03 | 郭麻子 | 35 |
NED04 | 许麻子 | 79 |
NED05 | 杨鬼子 | 60 |
姓名 | 分数 | ||
---|---|---|---|
分数 | 工号 | ||
中 | NED02 | 李四 | 89 |
NED04 | 许麻子 | 79 | |
优 | NED01 | 张三 | 99 |
差 | NED03 | 郭麻子 | 35 |
NED05 | 杨鬼子 | 60 |